broadway: Support window resize/drag via touch
authorAlexander Larsson <alexl@redhat.com>
Tue, 12 Nov 2013 15:44:30 +0000 (16:44 +0100)
committerAlexander Larsson <alexl@redhat.com>
Tue, 12 Nov 2013 15:45:14 +0000 (16:45 +0100)
gdk/broadway/gdkeventsource.c
gdk/broadway/gdkwindow-broadway.c

index a7d3c6e3c565a888d628bfcde25b0b2c4bd9d6d0..fe5dad65275bd9d3cc71fc5a5317f7b322080be5 100644 (file)
@@ -241,6 +241,10 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
             display_broadway->touch_sequence_down == message->touch.sequence_id)
           display_broadway->touch_sequence_down = 0;
 
+        if (event_type != GDK_TOUCH_BEGIN &&
+            is_first_down && _gdk_broadway_moveresize_handle_event (display, message))
+          break;
+
        event = gdk_event_new (event_type);
        event->touch.window = g_object_ref (window);
        event->touch.sequence = GUINT_TO_POINTER(message->touch.sequence_id);
index 5a67bb15c848fe4eb3e51789ca6664cb0c77fa84..bfcba8a9eab17b07deae323050572701ac2533b5 100644 (file)
@@ -1197,6 +1197,34 @@ _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
 
   switch (event->base.type)
     {
+    case BROADWAY_EVENT_TOUCH:
+      if (event->touch.touch_type == 2) /* END */
+        {
+          update_pos (mv_resize,
+                      event->touch.root_x,
+                      event->touch.root_y);
+
+          finish_drag (mv_resize);
+        }
+      else if (event->touch.touch_type == 1) /* UPDATE */
+        {
+          if (mv_resize->moveresize_window->resize_count > 0)
+            {
+              if (mv_resize->moveresize_pending_event)
+                *mv_resize->moveresize_pending_event = *event;
+              else
+                mv_resize->moveresize_pending_event =
+                  g_memdup (event, sizeof (BroadwayInputMsg));
+
+              break;
+            }
+          update_pos (mv_resize,
+                      event->touch.root_x,
+                      event->touch.root_y);
+        }
+
+      break;
+
     case BROADWAY_EVENT_POINTER_MOVE:
       if (mv_resize->moveresize_window->resize_count > 0)
        {